<?php

// base64转图片
// POST common.base64ToImage

namespace app\api\resource\common;

class Base64ToImage
{
    // 方法
    public $_method = ['POST'];
    // 前置
    public $_pre    = [];
    // 描述
    public $_description = 'base64转图片';
    // 参数
    public $_param  = [
        'base64' => 'base64字符串(含头部)',
        'dir'    => '存储目录,相对于public目录的文件名,默认upload',
    ];
    // 返回
    public $_return = [
        201 => '转换成功,返回图片URI',
        400 => 'base64字符串不合法',
        422 => 'base64字符串必须',
        500 => '服务器异常',
    ];

    public function run(&$request)
    {
        $base64 = $request->post('base64/s','','trim');
        $dir = $request->post('dir/s','upload','trim');

        if ( empty($base64) ) return [422,'base64字符串必须'];

        $base64 = str_replace(' ','+',$base64);

        $arr = explode(',',$base64);
        
        if ( !preg_match('/\/(.*);/',$arr[0],$matches) ) return [400,'base64字符串不合法'];

        $ext    = $matches[1];
        $base64 = $arr[1];

        $image  = base64_decode($base64);

        // 检查目录是否存在|如果没有则创建文件
        $filePath = ROOT_PATH . 'public' . DS . $dir;
        file_exists($filePath) || mkdir($filePath,0755);

        $fileName = date('YmdHis') . rand(1000,9999) . '.' . $ext;
        $fileDir  = $filePath . DS . $fileName;

        $size = file_put_contents($fileDir,$image);

        if ($size > 0) {
            $uri = '/public/' . $dir . '/' . $fileName;
            return [ 201,['uri'=>$uri] ];
        } else {
            return 500;
        }
    }
}